<?php
class Zax_Module_Conf
{
	private $language = "en";
	private $lng;
	
	public $_cache;
	
	/**
	 * Définit la langue de l'exécution courante
	 * @param $lang
	 */
	public function set_language($lang)
	{
		if(is_readable(ZAX_SYSTEM_PATH."/Lang/$lang/zax.lng"))
			$this->language = $lang;
	}
	
	public function auto_set_language()
	{
		
	}
	
	/**
	 * @return array Liste des langages disponibles
	 */
	public function get_available_languages()
	{
		$dir = opendir(ZAX_SYSTEM_PATH.'/Lang/');
		while($f = readdir($dir))
		{
			if(file_exists(ZAX_SYSTEM_PATH."/Lang/$f/zax.lng"))
				$a_lng[] = $f;
		}
		
		return $a_lng;
	}
	
	/**
	 * Charge un fichier de chaines traduites et définit les
	 * constantes (forme: LNG_[groupe]_[cle])
	 * Si non disponible, on utilise la langue $default_lang
	 * 
	 * @param $group Groupe à charger
	 * @param $default_lang
	 */
	public function load($group,$default_lang = "en")
	{
		static $loaded;
		if (isset($loaded[$group])) return true; 
		
		//Le fichier existe-t'il?
		if(ZAX_SYSTEM_PATH."/Lang/{$this->language}/$group.lng")
			$lng = $this->language;
			else $lng = $default_lang;
		
		//Chargement du fichier de langue pour ce groupe
		$this->lng[$group] = $this->parse_lang_file(ZAX_SYSTEM_PATH."/Lang/{$lng}/$group.lng");
		$this->define_constants_for_group($group);
		
		$loaded[$group] = 1;
		return true;
	}
	
	/**
	 * Parse un fichier de langue
	 * @param $file
	 * @return un tableau contenant les chaines traduites
	 */
	public function parse_lang_file($file)
	{
		$file = @file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
		$lng = array();
		
		if ($file)
		{
			foreach ($file as $line)
			{
				if($line{0} !== ';')
				{
					$line = explode('=',$line,2);
					$lng[strtolower(trim($line[0]))] = trim($line[1]);
				}
			}
		}
		
		return $lng;
	}
	
	/**
	 * Définit les constantes pour le groupe $group
	 * (forme: LNG_[groupe]_[cle])
	 * 
	 * @param $group
	 */
	public function define_constants_for_group($group)
	{
		static $already_defined;
		
		if(isset($already_defined[$group]))
			return true;
		
		foreach ($this->lng[$group] as $k => $v)
		{
			define('LNG_'.strtoupper($group).'_'.strtoupper($k), $v);
		}
		$already_defined[$group] = true;
		
		return true;
	}
}